package first.codeTop.alibaba;

/**
 * @ClassName LC70
 * @description:
 * @author: 荣燊
 * @create: 2021-10-19 14:49
 **/
public class LC70 {
    // 爬楼梯
    public static void main(String[] args) {
        // 第一种方法，递归
        long start = System.currentTimeMillis();
        int i = climbStairs(45);
        long end = System.currentTimeMillis();
        System.out.println("递归的计算结果是："+i+",计算时间是："+(end-start));
        // 第二种方法，非递归
        long start1 = System.currentTimeMillis();
        int i1 = climbStairs2(45);
        long end1 = System.currentTimeMillis();
        System.out.println("非递归的计算结果是："+i1+",计算时间是："+(end1-start1));
    }

    // 时间复杂度太高
    public static int climbStairs(int n) {
        if (n == 1 || n == 2) {
            return n;
        }
        return climbStairs(n-1) + climbStairs(n-2);
    }

    public static int climbStairs2(int n) {
        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;
        for (int i=2; i<=n; i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];
    }
}
